/**
 * Mario Roberto Gómez Flores (12165)
 * Pablo Estrada (12121)
 * Miguel Novella (12164)
 * Alberto Suriano (12281) * 
 *
 */
import java.util.Scanner;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        String ruta;
        int cantidad=2000;
        int rango = 2000;
        Scanner input = new Scanner(System.in);
        boolean flag=false;
        String ingresoTexto="";
        int ingresoInt=0;

        //Llamando a la clase encargada de generar el txt 
        GeneradorNumeros nuevo = new GeneradorNumeros();
        //generando el archivo txt
        nuevo.generarArchivo(cantidad,rango+1);
        System.out.println(".:El archivo ha sido creado exitosamente:.");
        
        //Creando el lector y convertidor del txt
        LectorTexto nuevo2=new LectorTexto();
        //Aqui se lee el txt
        String prueba1=nuevo2.lectorTxt(nuevo.getGeneralRuta());
        System.out.println("La lista contiene: "+prueba1);
        while (flag==false){
        //Menu para selección de sorting
            System.out.println(".:Menu:.");
            System.out.println("1. Quick");
            System.out.println("2. Insertion");
            System.out.println("3. Bubble");
            System.out.println("4. Merge");
            System.out.println("5. Salir");
            System.out.println(".:Ingrese el numero de la opcion:.");

            ingresoTexto=input.nextLine();

            //Variables para almacenar los ingresos en el try
            Integer[] arrayPrueba = new Integer[0];
            Sorter ordenador = new Sorter();
            try{
                ingresoInt=Integer.parseInt(ingresoTexto);
                System.out.println("El ingreso fue "+ingresoInt);
                //Switch para los casos correctos de ingreso
                switch(ingresoInt){
                    case 1: ///QUICK
                        arrayPrueba = nuevo2.convertirInteger(nuevo2.convertir_a_Array(prueba1));
                        ordenador.quick(arrayPrueba);
                        System.out.println(Arrays.toString(arrayPrueba));
                        flag=false;
                        break;
                    case 2: ///INSERTION
                        arrayPrueba=nuevo2.convertirInteger(nuevo2.convertir_a_Array(prueba1));
                        ordenador.insertion(arrayPrueba);
                        System.out.println(Arrays.toString(arrayPrueba));
                        flag=false;
                        break;
                    case 3: ///BUBBLE
                        //metodo para convertirlo a un array de Integer
                        arrayPrueba = nuevo2.convertirInteger(nuevo2.convertir_a_Array(prueba1));
                        ordenador.bubble(arrayPrueba);
                        System.out.println(Arrays.toString(arrayPrueba));
                        flag=false;
                        break;
                    case 4: ///MERGE
                        //metodo para convertirlo a un array de Integer
                        arrayPrueba = nuevo2.convertirInteger(nuevo2.convertir_a_Array(prueba1));
                        Comparable[] nuevaLista=ordenador.mergeSort(arrayPrueba);
                        System.out.println(Arrays.toString(nuevaLista));
                        flag=false;
                        break;
                    case 5:
                        flag=true;
                        break;
                    default:
                        System.out.println(".:Opcion incorrecta:.");
                        break;
                }
                
            }
            catch(NumberFormatException e){
                System.out.println(".:ERROR: Ingreso incorrecto POR que?:.");
                System.out.println("El ingreso fue "+ingresoInt);
                flag=false;
            }
        }
        
        
       
        
        
    }
}
